function sayHello({name,word}) {
    console.log(`${name}说：“${word}”`);
}

let people = {
    name: "奉先",
    word: "你好"
}

sayHello(people);
console.log("-----------sayHello结束-----------")


function sum({a = 0,b = 0}) {
    console.log("a = ",a);
    console.log("b = ",b);
    console.log("a + b =",a + b);
    console.log("----------------------")
}

let obj = {
    // a: undefined,
    // b: 2,
}

// sum(obj);

function sum2({a,b} = {a:0,b:0}) {
    console.log("---------sum2-------------")
    console.log("a = ",a);
    console.log("b = ",b);
    console.log("a + b =",a + b);
    
}

// 此时obj是会被解构的，但是解构的结果没有办法赋值给a,b，整个解构的过程是有的。
sum2({});
// null直接出现异常
// sum2(null); // TypeError

// undefined或者不传参解构失败：会使用解构默认对象
// sum2(undefined);
// sum2();


function sum3({a = 0,b = 0} = {a:1}) {
    console.log("---------sum3-------------")
    console.log("a = ",a);
    console.log("b = ",b);
    console.log("a + b =",a + b);
}

// sum3({a:3});
sum3();
// sum3(null);
sum3(9999);

// 解构与默认值：
// fun({参数1} = {参数2})
// 参数1: 解构成功（有对象），会使用参数1对象。 fun({}),fun({a:1})
//   参数1中的默认值: {a=0,b=0}，对象中该属性值为undefined时使用，fun({})
//   参数1如果传null给它，会出现异常
// 参数2：解构失败，直接使用参数2作为函数中的参数的默认值
//   如果参数2中的属性没有办法成功解构赋值给参数1中的属性，那么参数1中的属性默认值生效